package com.demo.java.OD151_200.OD152;

import java.util.*;
import java.util.stream.Collectors;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【乱序整数序列两数之和绝对值最小】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145749014
 */
public class OdMain {
    public static void main(String[] args) {
        try (Scanner scanner = new Scanner(System.in)) {
            // 读取输入的字符串
            String numsStr = scanner.nextLine();
            solveMethod(numsStr); // 处理输入
        }
    }

    private static void solveMethod(String numsStr) {
        // 将输入字符串转换为整数列表，并去重
        List<Integer> numbers = Arrays.stream(numsStr.split(" "))
                .map(Integer::parseInt)
                .distinct() // 去重
                .collect(Collectors.toList());

        // 初始化最小值和结果集
        int minSum = Integer.MAX_VALUE;
        Set<Integer> result = new TreeSet<>(); // 使用 TreeSet 排序

        // 双重循环计算所有两两组合的和的绝对值
        for (int i = 0; i < numbers.size() - 1; ++i) {
            for (int j = i + 1; j < numbers.size(); j++) {
                int sum = calculateSum(numbers.get(i), numbers.get(j));
                // 更新最小和
                if (sum < minSum) {
                    minSum = sum;
                    result.clear(); // 清空之前的结果
                    result.add(numbers.get(i)); // 添加新结果
                    result.add(numbers.get(j));
                }
            }
        }

        // 输出结果
        if (!result.isEmpty()) {
            printResult(result, minSum);
        }
    }

    // 计算两个数和的绝对值
    private static int calculateSum(int a, int b) {
        return Math.abs(a + b);
    }

    // 输出结果
    private static void printResult(Set<Integer> result, int minSum) {
        for (Integer number : result) {
            System.out.print(number + " ");
        }
        System.out.println(minSum);
    }
}